package jp.co.dailyReport;

import java.util.Enumeration;
import java.util.HashMap;
import java.util.ResourceBundle;

import org.apache.log4j.Logger;

/**
 * リソースバンドルから値を読み込み、管理します。
 */
public class ResourceLoader {
	private static Logger logger = Logger.getLogger(ResourceLoader.class);

	private String baseName;
	private ResourceBundle resourceBundle;

	/**
	 * コンストラクタ
	 * @param baseName
	 */
	public ResourceLoader(String baseName) throws Exception{
		this.baseName = baseName;
		try{
			resourceBundle = ResourceBundle.getBundle(baseName);
		}catch(Exception e){
			logger.fatal("FATAL!! Failed in getting ResourceBundle for name : " + baseName);
			throw new Exception(e);
		}
		
		load();
	}

	/**
	 * リソースバンドルから値を全て読み込み、HashMapに格納します。
	 */
	public HashMap load() {
		
		HashMap hash = new HashMap();
		Enumeration keys = resourceBundle.getKeys();
		
		while (keys.hasMoreElements()) {
			String key = null;
			String value = null;
			try {
				key = (String) keys.nextElement();
				value = this.getString(key);
				logger.debug("Loading properties - key: " + key + ", value: " + value);
				hash.put(key, value);
			}catch(Throwable t){
				logger.error("Failed in loading setting - key: " + key + ", value: " + value);
				return null;
			}
		}
		return hash;
	}

	/**
	 * ResourceBundleから、指定したキーに対応する値を取得します。
	 * 対応する値が存在しない場合には、nullを返します。
	 */
	private String getString(String key) {
		String value = null;
		try {
			value = resourceBundle.getString(key);
		} catch (Exception e) {
			logger.error("INIT ERROR!! - Failed in loading resource with key: " + key);
		}
		return value;
	}
}
